﻿using System;
using System.Linq;
using System.Windows.Forms;
using ProyectoActivos.Daos;
using ProyectoActivos.Util;
using ProyectoActivos.Validate;

namespace ProyectoActivos.Forms.Consultas
{
    public partial class FrmConsultaInventarioFinMes : Form,IValidateForm
    {
        private bool _valido;

        public static FrmConsultaInventarioFinMes Activo;

        public FrmConsultaInventarioFinMes()
        {
            InitializeComponent();
            Activo = this;
            _valido = true;
            dGridResultado.AutoGenerateColumns = false;
        }

        private void FrmConsultaInventarioFinMes_Load(object sender, EventArgs e)
        {
            cmbMes.Items.Add(new ItemGenericoComboBox { Id = 0, Descripcion = "- Ninguno -" });
            cmbMes.Items.Add(new ItemGenericoComboBox { Id = 1, Descripcion = "Enero" });
            cmbMes.Items.Add(new ItemGenericoComboBox { Id = 2, Descripcion = "Febrero" });
            cmbMes.Items.Add(new ItemGenericoComboBox { Id = 3, Descripcion = "Marzo" });
            cmbMes.Items.Add(new ItemGenericoComboBox { Id = 4, Descripcion = "Abril" });
            cmbMes.Items.Add(new ItemGenericoComboBox { Id = 5, Descripcion = "Mayo" });
            cmbMes.Items.Add(new ItemGenericoComboBox { Id = 6, Descripcion = "Junio" });
            cmbMes.Items.Add(new ItemGenericoComboBox { Id = 7, Descripcion = "Julio" });
            cmbMes.Items.Add(new ItemGenericoComboBox { Id = 8, Descripcion = "Agosto" });
            cmbMes.Items.Add(new ItemGenericoComboBox { Id = 9, Descripcion = "Septiembre" });
            cmbMes.Items.Add(new ItemGenericoComboBox { Id = 10, Descripcion = "Octubre" });
            cmbMes.Items.Add(new ItemGenericoComboBox { Id = 11, Descripcion = "Noviembre" });
            cmbMes.Items.Add(new ItemGenericoComboBox { Id = 12, Descripcion = "Diciembre" });
            cmbMes.SelectedIndex = 0;
        }

        private void btnConsultar_Click(object sender, EventArgs e)
        {
            _valido = true;
            errorProvider.Clear();
            FormsAssert.AssertTextBoxNotEmptyAndSize(txtAnho,4,errorProvider,this);
            FormsAssert.AssertTextBoxOnlyNumbers(txtAnho,errorProvider,this);
            if (cmbMes.SelectedIndex==0)
            {
                errorProvider.SetError(cmbMes, "Debe seleccionar un mes");
                Invalid();
            }
            ActionExecutor.Execute(this, delegate
            {
                var date = new DateTime(int.Parse(txtAnho.Text), ((ItemGenericoComboBox)cmbMes.SelectedItem).Id, DateTime.DaysInMonth(int.Parse(txtAnho.Text), ((ItemGenericoComboBox)cmbMes.SelectedItem).Id));
                var resultado=new ConsultasDAO().ObtenerConsultaInventario(date);
                var query = from r in resultado
                            group r by new { r.NombreFamilia, 
                                             r.NombreSubFamilia, 
                                             r.CodigoArticulo, 
                                             r.DescripcionArticulo, 
                                             r.Marca, 
                                             r.Modelo, 
                                             r.Serie, 
                                             r.NombreCondicionEquipo} into g
                            select new { g.Key.NombreFamilia,
                                         g.Key.NombreSubFamilia,
                                         g.Key.CodigoArticulo,
                                         g.Key.DescripcionArticulo,
                                         g.Key.Marca,
                                         g.Key.Modelo,
                                         g.Key.Serie, 
                                         Cantidad = g.Sum(r => r.Cantidad),
                                         g.Key.NombreCondicionEquipo};
                dGridResultado.DataSource = query.ToList();
            });
        }

        private void FrmConsultaInventarioFinMes_FormClosing(object sender, FormClosingEventArgs e)
        {
            Activo = null;
        }

        public void Invalid()
        {
            _valido = false;
        }

        public bool IsValid()
        {
            return _valido;
        }

        private void tStripButtonExportarAExcel_Click(object sender, EventArgs e)
        {
            if (dGridResultado.Rows.Count > 0)
            {
                ActionExecutor.Execute(this, () => ExcelUtils.ExportarGridAExcel(dGridResultado));
            }
        }
        
    }
}
